package com.winner.es.model;

import com.alibaba.fastjson.annotation.JSONField;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.data.annotation.Id;
import org.springframework.data.elasticsearch.annotations.Document;
import org.springframework.data.elasticsearch.annotations.Field;
import org.springframework.data.elasticsearch.annotations.FieldType;

import java.io.Serializable;
import java.util.Date;

/**
 *  es的index的settings 和 mapping 设置，是最初的第一次设置。后续即使更改，也不起作用。
 *  但是mapping中的属性名称以及属性个数如果更改了，会更新到ES中。这样会导致数据的丢失。需要注意。
 *
 * 如果不能给索引库设置 默认的分词器  analyzer="ik_max_word",searchAnalyzer="ik_max_word" 最好设置为一致的
 *
 * 项目启动后，通过注解会生成setting和 mapping
 * 当你修改了mapping后, 比如将某字段的 long改为int,那么需要在kibana将索引删除后再启动项目,才可以启动成功,并更新了mapping
 * 新增/删除field,不需要删除已有的索引.
 */

@Document(indexName = "employee_v1", type = "employee", shards = 5, replicas = 0)
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class Employee implements Serializable {

    // 文档主键(_id,不传参会自动生成一个) 唯一标识 又作为文档的字段  /*ID,只能是Long或者Keyword类型*/
    @Id
    @Field(type = FieldType.Keyword)
    private String id;

    //index=true,store=false 即表示默认 该字段加入索引库  type = FieldType.Text在需要分词的属性上面加ik_max_word
    //@Field(index=true,store=false, analyzer="ik_max_word",searchAnalyzer="ik_max_word",type = FieldType.Text)
    @Field(type = FieldType.Text)
    private String name;

    @Field(type = FieldType.Text)
    private String businessUnitDescr;

    @Field(type = FieldType.Text)
    private String employeeId;

    @Field(type = FieldType.Text)
    private String phone;

    @Field(type = FieldType.Text)
    private String email;

    /** 删除标记 */
    @Field(type = FieldType.Integer)
    private Integer delFlag;

    /** logstash增量同步mysql到es  */
    /** 在logstash配置文件jdbc.sql中  where update_time > :sql_last_value  station_parameter文件会保存上一次同步开始时的时间*/
    @JSONField(format = "yyyy-MM-dd HH:mm:ss")
    @Field(type = FieldType.Date)
    private Date updateTime;

}
